home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Info 1994 March
/
Internet Info CD-ROM (Walnut Creek) (March 1994).iso
/
networking
/
info-service
/
wais
/
ir-book-sources
/
stemmer
/
stemmer.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-04-08
|
4KB
|
126 lines
/******************************* stemmer.c ********************************
*
* Program to demonstrate and test the Porter stemming function. This
* program takes a single filename on the command line and lists stemmed
* terms on stdout.
*
**/
#include <stdio.h>
#include <ctype.h>
#include "stem.h"
/******************************************************************************/
/******************** Private Defines and Data Structures *****************/
#define EOS '\0'
/******************************************************************************/
/************************ Private Function Definitions ********************/
#ifdef __STDC__
static char * GetNextTerm( FILE *stream, int size, char *term );
#else
static char * GetNextTerm();
#endif
/*FN***************************************************************************
GetNextTerm( stream, size, term )
Returns: char * -- buffer with the next input term, NULL at EOF
Purpose: Grab the next token from an input stream
Plan: Part 1: Return NULL immediately if there is no input
Part 2: Initialize the local variables
Part 3: Main Loop: Put the next word into the term buffer
Part 4: Return the output buffer
Notes: None.
**/
static char *
GetNextTerm( stream, size, term )
FILE *stream; /* in: source of input characters */
int size; /* in: bytes in the output buffer */
char *term; /* in/out: where the next term in placed */
{
char *ptr; /* for scanning through the term buffer */
int ch; /* current character during input scan */
/* Part 1: Return NULL immediately if there is no input */
if ( EOF == (ch = getc(stream)) ) return( NULL );
/* Part 2: Initialize the local variables */
*term = EOS;
ptr = term;
/* Part 3: Main Loop: Put the next word into the term buffer */
do
{
/* scan past any leading non-alphabetic characters */
while ( (EOF != ch ) && !isalpha(ch) ) ch = getc( stream );
/* copy input to output while reading alphabetic characters */
while ( (EOF != ch ) && isalpha(ch) )
{
if ( ptr == (term+size-1) ) ptr = term;
*ptr++ = ch;
ch = getc( stream );
}
/* terminate the output buffer */
*ptr = EOS;
}
while ( (EOF != ch) && !*term );
/* Part 4: Return the output buffer */
return( term );
} /* GetNextTerm */
/******************************************************************************/
/*FN***************************************************************************
main( argc, argv )
Returns: int -- 0 on success, 1 on failure
Purpose: Program main function
Plan: Part 1: Open the input file
Part 2: Process each word in the file
Part 3: Close the input file and return
Notes:
**/
int
main( argc, argv )
int argc; /* in: how many arguments */
char *argv[]; /* in: text of the arguments */
{
char term[64]; /* for the next term from the input line */
FILE *stream; /* where to read characters from */
/* Part 1: Open the input file */
if ( !(stream = fopen(argv[1],"r")) ) exit(1);
/* Part 2: Process each word in the file */
while( GetNextTerm(stream,64,term) )
if ( Stem(term) ) (void)printf( "%s\n", term );
/* Part 3: Close the input file and return */
(void)fclose( stream );
return(0);
} /* main */